﻿Public Class frm_ABM_Cuotas
    Enum estado
        insertar
        modificar
        eliminar

    End Enum
    Dim accion As estado
    Dim acceso As New AccesoBD
    Dim cuota As Integer

    Private Sub frm_ABM_Cuotas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        gridCurso.Enabled = False
        btnCancelar.Enabled = False
        txt_nro.ReadOnly = True
        txt_vencimiento.ReadOnly = True
        txt_interes.ReadOnly = True
        cargarGrillaCuotas()
        btnGuardar.Enabled = False
    End Sub

    Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click
        gridCurso.Enabled = True
        If comprobarCuotas() Then
            MsgBox("Ya están cargadas todas las cuotas para el curso")
            Exit Sub
        End If
        accion = estado.insertar
        limpiarCampos()
        btnNuevo.Enabled = False
        txt_nro.Focus()
        txt_nro.ReadOnly = False
        txt_vencimiento.ReadOnly = False
        txt_interes.ReadOnly = False
        txt_nro.Enabled = True
        btnGuardar.Enabled = True
        btnCancelar.Enabled = True
    End Sub
    Private Sub limpiarCampos()
        txt_nro.Text = ""
        txt_vencimiento.Text = ""
        txt_interes.Text = ""
    End Sub
    Private Function comprobarCuotas() As Boolean
        'si la cantidad de cuotas, es igual la cantidad de filas cargadas, no lo deja cargar
        If Integer.Parse(Me.txt_cant.Text) = Integer.Parse(grillaCuotas.Rows.Count) Then
            Return True
        End If
        Return False
    End Function

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
        Dim comando As String
        If accion = estado.insertar Then
            comando = "insert into Cuotas values(" & Me.txt_nro.Text & "," & Me.txt_id.Text
            comando &= ",'" & DateTime.Parse(Me.txt_fecha_curso.Text) & "'," & Single.Parse(Me.txt_precio.Text)
            comando &= ",'" & DateTime.Parse(Me.txt_vencimiento.Text) & "'," & Me.txt_interes.Text & ")"
            acceso._insertar(comando)
        End If
        If accion = estado.modificar Then
            comando = "update Cuotas set fechaVencimiento='"
            comando &= DateTime.Parse(Me.txt_vencimiento.Text) & "', interes="
            comando &= Integer.Parse(Me.txt_interes.Text) & " where idCurso=" & Me.txt_id.Text
            comando &= " and fechaInicio='" & DateTime.Parse(Me.txt_fecha_curso.Text) & "' and nroCuota="
            comando &= Integer.Parse(Me.txt_nro.Text)
            acceso._modificar(comando)
        End If
        If accion = estado.eliminar Then
            comando = "delete Cuotas where idCurso=" & Me.txt_id.Text
            comando &= " and fechaInicio='" & DateTime.Parse(Me.txt_fecha_curso.Text) & "' and nroCuota="
            comando &= Integer.Parse(Me.txt_nro.Text)
            acceso._eliminar(comando)
        End If
        cargarGrillaCuotas()
        limpiarCampos()
        gridCurso.Enabled = False
        btnGuardar.Enabled = False
        btnCancelar.Enabled = False
        txt_vencimiento.ReadOnly = True
        txt_interes.ReadOnly = True
        btnNuevo.Enabled = True
    End Sub
    Private Sub cargarGrillaCuotas(Optional ByVal numeroCuota As String = "")
        Dim comando As String
        Dim tabla As DataTable
        ' numeroCuota es un parámetro que le pasa el boton buscar
        If numeroCuota = "" Then
            comando = "Cuotas where idCurso=" & Me.txt_id.Text & " and fechaInicio='"
            comando &= DateTime.Parse(Me.txt_fecha_curso.Text) & "'"
        Else
            comando = "Cuotas where idCurso=" & Me.txt_id.Text & " and fechaInicio='"
            comando &= DateTime.Parse(Me.txt_fecha_curso.Text) & "' and nroCuota=" & Integer.Parse(numeroCuota)

        End If
        tabla = acceso.devuelveTabla(comando)
        grillaCuotas.Rows.Clear()
        Dim c As Integer
        For c = 0 To tabla.Rows.Count - 1
            grillaCuotas.Rows.Add(tabla.Rows(c)("nroCuota"), tabla.Rows(c)("fechaVencimiento"), tabla.Rows(c)("interes"))
        Next
    End Sub
    Private Sub cargarDatosCuota()
        Dim comando As String
        Dim tabla As DataTable
        comando = "Cuotas where idCurso=" & Integer.Parse(Me.txt_id.Text) & " and fechaInicio='"
        comando &= DateTime.Parse(Me.txt_fecha_curso.Text) & "' and nroCuota=" & Me.cuota

        tabla = acceso.devuelveTabla(comando)
        Dim fila As DataRow = tabla.Rows(0)

        txt_nro.Text = CStr(fila("nroCuota"))
        txt_vencimiento.Text = CStr(fila("fechaVencimiento"))
        txt_interes.Text = CStr(fila("interes"))

    End Sub
    Private Function buscarCuota() As Boolean
        Dim tabla As DataTable
        Dim comando As String
        comando = "Cuotas where idCurso=" & Me.txt_id.Text & " and fechaInicio='"
        comando &= DateTime.Parse(Me.txt_fecha_curso.Text) & "' and nroCuota=" & Me.txt_nro.Text
        tabla = acceso.devuelveTabla(comando)
        If tabla.Rows.Count > 0 Then
            Return True
        End If
        Return False
    End Function

    Private Sub camposEnteros_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_nro.KeyPress, txt_interes.KeyPress
        If Char.IsNumber(e.KeyChar) = False And (e.KeyChar = ChrW(Keys.Back)) = False Then
            MsgBox("Caracter no válido! Ingrese SOLO numeros", vbCritical, "Importante")
            e.KeyChar = ""
        End If
    End Sub

    Private Sub txt_nro_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txt_nro.Validated
        If txt_nro.Text = "" Then
            MsgBox("No ingresó número de cuota")
            txt_nro.Focus()
            Exit Sub
        End If
        If buscarCuota() Then
            MsgBox("Ya está cargado este numero de cuota para este curso")
            txt_nro.Text = ""
            txt_nro.Focus()
            Exit Sub
        End If
        If Integer.Parse(Me.txt_nro.Text) > Integer.Parse(txt_cant.Text) Then
            MsgBox("El número de cuota no puede ser mayor que la cantidad de cuotas definidas")
            txt_nro.Text = ""
            txt_nro.Focus()
        End If
    End Sub

    Private Sub txt_vencimiento_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txt_vencimiento.Validated
        If (IsDate(txt_vencimiento.Text)) = False Then
            MsgBox("Fecha errónea")
            txt_vencimiento.Focus()
            Exit Sub
        End If
        If DateTime.Parse(txt_vencimiento.Text) < DateTime.Now.Date = True Then
            MsgBox("La fecha no puede ser menor a la de hoy!")
            txt_vencimiento.Focus()
            Exit Sub
        End If
        'Compare funciona asi
        'Less than zero t1 is earlier than t2.
        'Zero() t1 is the same as t2.
        'Greater than zero t1 is later than t2.
        If DateTime.Compare(DateTime.Parse(txt_vencimiento.Text), DateTime.Parse(txt_fecha_curso.Text)) <= 0 Then
            MsgBox("La fecha de vencimiento de la cuota no puede ser menor o igual a la fecha de inicio del curso")
            txt_vencimiento.Focus()
            Exit Sub
        End If
    End Sub

    Private Sub grillaCuotas_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles grillaCuotas.SelectionChanged
        If grillaCuotas.SelectedRows.Count > 0 Then
            cuota = grillaCuotas.Item("nro", grillaCuotas.SelectedRows(0).Index).Value
            cargarDatosCuota()
        End If
    End Sub

    Private Sub ModificarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ModificarToolStripMenuItem.Click
        accion = estado.modificar
        cargarDatosCuota()
        gridCurso.Enabled = True
        txt_vencimiento.ReadOnly = False
        txt_interes.ReadOnly = False
        txt_vencimiento.Focus()
        btnNuevo.Enabled = False
        btnGuardar.Enabled = True
        btnCancelar.Enabled = True
        txt_nro.ReadOnly = True
    End Sub

    Private Sub EliminarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EliminarToolStripMenuItem.Click
        accion = estado.eliminar
        If MessageBox.Show("Esta seguro que desea eliminar el registro?!", "Eliminar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            cargarDatosCuota()
            gridCurso.Enabled = True
            btnNuevo.Enabled = False
            btnGuardar.Enabled = True
            btnCancelar.Enabled = True
            btnGuardar.Focus()
        End If
    End Sub

    Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
        If Me.txt_busq_cuota.Text = "" Then
            MsgBox("Debe ingresar el numero de cuota a buscar")
            txt_busq_cuota.Focus()
            Exit Sub
        End If
        cargarGrillaCuotas(Me.txt_busq_cuota.Text)
    End Sub

    Private Sub btnRefrescar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRefrescar.Click
        cargarGrillaCuotas()
        txt_busq_cuota.Text = ""
    End Sub

    Private Sub btnVolver_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVolver.Click
        Me.Close()
    End Sub

    Private Sub frm_ABM_Cuotas_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        If MessageBox.Show("Esta seguro que desea salir?!", "Importante", MessageBoxButtons.YesNo, MessageBoxIcon.Question) _
            = Windows.Forms.DialogResult.No Then
            e.Cancel = True
        Else
            e.Cancel = False
        End If
    End Sub
End Class